// function log<T>(value: T): T {
//   console.log(value);
//   return value
// }

// log<string[]>(['a','b'])
// log(['a', 'b'])
// type Log = <T>(value: T) => T
// let myLog: Log = log
// interface Log<T = string>{
//   (value: T): T
// }
// let myLog: Log<number> = log

// let yourLog: Log = log
// yourLog('sss')

// class Log<T> {
//   run(value:T) {
//     console.log(value);
//     return value
//   }
// }
// let log1 = new Log<number>()
// log1.run(2)
// let log2 = new Log()
// log2.run({a:2})
interface Length {
  length: number
}
function log<T extends Length>(value: T): T{
  console.log(value, value.length);
  return value
}